package com.atguig.e_lambda;

import java.util.Date;
/*

    Lambda 表达式的优势 :
        1. 格式更简便
        2. 延时加载类 -> 当只写了Lambda表达式 并没有使用实现类对象时,此实现类的字节码文件时不生成

    Lambda 表达式的弊端 :
        1. 使用的范围有限 => 因为必须是函数式接口

    Lambda表达式的简化格式 :
        1. 当重写方法的方法体有且仅有一句,那么可以省略包裹方法体的大括号 和 语句结尾的分号 如果有return ,return也可以省略
                条件 : 要省略必须一起省略
 */
public class Demo {
    public static void main(String[] args) {
        //创建接口对象
        InterA ia1 = new InterA() { //Demo$1.class
            @Override
            public void show() {
                System.out.println("匿名内部类实现的show方法");
            }
        };

        //ia1.show();

        System.out.println("--------------------------");

        //创建接口对象
        //面向函数式编程 : 更专注 重写方法的逻辑编写
        InterA ia2 = () -> System.out.println("Lambda表达式实现的show方法");

        //ia2.show();

        System.out.println("--------------------------");
        //匿名内部类作为方法实参传递
        method(new InterA() {
            @Override
            public void show() {
                System.out.println("匿名内部类实现的show方法");
            }
        });

        method(() -> System.out.println("Lambda表达式实现的show方法"));



    }

    public static void method(InterA ia){
        ia.show();
    }

}


//准备函数式接口
@FunctionalInterface
interface InterA{
    public abstract void show();
}



